home *** CD-ROM | disk | FTP | other *** search
/ PC World 2007 June / PCWorld_2007-06_cd.bin / v cisle / tclock / tclocklight-040702-3.exe / source / common / nodeflib.c < prev    next >
C/C++ Source or Header  |  2004-02-13  |  4KB  |  195 lines

  1. /*-------------------------------------------------------------
  2.   nodeflib.c : replacements of standard library's functions
  3.   (C) 1997-2003 Kazuto Sato
  4.   Please read readme.txt about the license.
  5.   
  6.   Written by Kazubon, Nanashi-san
  7. ---------------------------------------------------------------*/
  8.  
  9. #include "common.h"
  10.  
  11. #ifdef NODEFAULTLIB
  12.  
  13. /*-------------------------------------------
  14.   memcpy for BCC
  15. ---------------------------------------------*/
  16. void r_memcpy(void *d, const void *s, size_t l)
  17. {
  18.     size_t i;
  19.     for (i = 0; i < l; i++) *((char*)d)++ = *((char*)s)++;
  20. }
  21.  
  22. /*-------------------------------------------
  23.   memset for BCC
  24. ---------------------------------------------*/
  25. void r_memset(void *d, int c, size_t l)
  26. {
  27.     size_t i;
  28.     for (i = 0; i < l; i++) *((char*)d)++ = (char)c;
  29. }
  30.  
  31. /*-------------------------------------------
  32.   strstr
  33. ---------------------------------------------*/
  34. char *r_strstr(const char *string, const char *strCharSet)
  35. {
  36.     const char *p = string;
  37.     while(*p)
  38.     {
  39.         if(strncmp(p, strCharSet, strlen(strCharSet)) == 0)
  40.             return (char*)p;
  41.         p++;
  42.     }
  43.     return NULL;
  44. }
  45.  
  46. /*-------------------------------------------
  47.   strncmp
  48. ---------------------------------------------*/
  49. int r_strncmp(const char* d, const char* s, size_t n)
  50. {
  51.     unsigned int i;
  52.     for(i = 0; i < n; i++)
  53.     {
  54.         if(*s == 0 && *d == 0) break;
  55.         if(*s != *d) return ((int)*d - (int)*s);
  56.         d++; s++;
  57.     }
  58.     return 0;
  59. }
  60.  
  61. /*-------------------------------------------
  62.   atoi
  63. ---------------------------------------------*/
  64. int r_atoi(const char *p)
  65. {
  66.     int r = 0;
  67.     while(*p)
  68.     {
  69.         if('0' <= *p && *p <= '9')
  70.             r = r * 10 + *p - '0';
  71.         else break;
  72.         p++;
  73.     }
  74.     return r;
  75. }
  76.  
  77. /*-------------------------------------------
  78.   convert a string (hexadecimal) to int
  79. ---------------------------------------------*/
  80. int r_atox(const char *p)
  81. {
  82.     int r = 0;
  83.     while(*p)
  84.     {
  85.         if('0' <= *p && *p <= '9')
  86.             r = r * 16 + *p - '0';
  87.         else if('A' <= *p && *p <= 'F')
  88.             r = r * 16 + *p - 'A' + 10;
  89.         else if('a' <= *p && *p <= 'f')
  90.             r = r * 16 + *p - 'a' + 10;
  91.         p++;
  92.  
  93.     }
  94.     return r;
  95. }
  96.  
  97. /*-------------------------------------------
  98.   wtoi
  99. ---------------------------------------------*/
  100. int r__wtoi(const WCHAR *p)
  101. {
  102.     int r = 0;
  103.     while(*p)
  104.     {
  105.         if('0' <= *p && *p <= '9')
  106.             r = r * 10 + *p - '0';
  107.         else break;
  108.         p++;
  109.     }
  110.     return r;
  111. }
  112.  
  113. /*-------------------------------------------
  114.   wcslen
  115. ---------------------------------------------*/
  116. int r_wcslen(const wchar_t *p)
  117. {
  118.     int n = 0; while(*p) { n++; p++; } return n;
  119. }
  120.  
  121. /*-------------------------------------------
  122.   wcscpy
  123. ---------------------------------------------*/
  124. wchar_t *r_wcscpy(wchar_t *dp, const wchar_t *sp)
  125. {
  126.     wchar_t *p = dp;
  127.     while(*sp) *p++ = *sp++; *p = 0; return dp;
  128. }
  129.  
  130. /*-------------------------------------------
  131.   wcsncmp
  132. ---------------------------------------------*/
  133. int r_wcsncmp(const wchar_t *p1, const wchar_t *p2, int count)
  134. {
  135.     int i;
  136.     for(i = 0; i < count; i++)
  137.     {
  138.         if(*p1 == 0 && *p2 == 0) break;
  139.         if(*p1 != *p2) return ((int)*p1 - (int)*p2);
  140.         p1++; p2++;
  141.     }
  142.     return 0;
  143. }
  144.  
  145. /*-------------------------------------------
  146.   wcscat
  147. ---------------------------------------------*/
  148. wchar_t *r_wcscat(wchar_t *dp, const wchar_t *sp)
  149. {
  150.     wchar_t *p = dp;
  151.     while(*p) p++;
  152.     while(*sp) *p++ = *sp++; *p = 0; return dp;
  153. }
  154.  
  155. /*-------------------------------------------
  156.   32bit x 32bit = 64bit
  157. ---------------------------------------------*/
  158.  
  159. #if defined(_MSC_VER) && (_MSC_VER >= 1200)
  160. typedef LARGE_INTEGER TC_SINT64;
  161. typedef ULARGE_INTEGER TC_UINT64;
  162. #else
  163. typedef union _TC_SINT64 {
  164.     struct {
  165.         DWORD LowPart;
  166.         LONG HighPart;
  167.     } u;
  168.     LONGLONG QuadPart;
  169. } TC_SINT64;
  170. typedef union _TC_UINT64 {
  171.     struct {
  172.         DWORD LowPart;
  173.         DWORD HighPart;
  174.     } u;
  175.     ULONGLONG QuadPart;
  176. } TC_UINT64;
  177. #endif
  178.  
  179. DWORDLONG r_M32x32to64(DWORD a, DWORD b)
  180. {
  181.     TC_UINT64 r;
  182.     DWORD *p1, *p2, *p3;
  183.     memset(&r, 0, 8);
  184.     p1 = &r.u.LowPart;
  185.     p2 = (DWORD*)((BYTE*)p1 + 2);
  186.     p3 = (DWORD*)((BYTE*)p2 + 2);
  187.     *p1 = LOWORD(a) * LOWORD(b);
  188.     *p2 += LOWORD(a) * HIWORD(b) + HIWORD(a) * LOWORD(b);
  189.     *p3 += HIWORD(a) * HIWORD(b);
  190.     return *(DWORDLONG*)(&r);
  191. }
  192.  
  193. #endif
  194.  
  195.